# !/usr/bin/env python
# -*-coding:utf-8 -*-
"""
@Author : Ayao
@Time   : 2022/5/8
@File   : 合并区间.py
"""

"""
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort()
        res = [intervals[0]]
        for i in intervals[1:]:
            if res[-1][1] >= i[0]:
                res[-1][1] = max(i[1],res[-1][1])
            else:
                res.append(i)
        return res

作者：郝皓篪
链接：https://leetcode.cn/leetbook/read/array-and-string/c5tv3/?discussion=uW4RQK
来源：力扣（LeetCode）
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
"""

"""
 以数组 intervals 表示若干个区间的集合，其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间，并返回 一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间 。

 

示例 1：

输入：intervals = [[1,3],[2,6],[8,10],[15,18]]
输出：[[1,6],[8,10],[15,18]]
解释：区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2：

输入：intervals = [[1,4],[4,5]]
输出：[[1,5]]
解释：区间 [1,4] 和 [4,5] 可被视为重叠区间。
 

提示：

1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104

作者：力扣 (LeetCode)
链接：https://leetcode.cn/leetbook/read/array-and-string/c5tv3/
来源：力扣（LeetCode）
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
"""

intervals = [[2, 2], [1, 3], [8, 10], [15, 18]]


class Solution:
    def merge(self, intervals):
        intervals.sort(key=lambda x: x[0])
        merges = []
        for i in range(len(intervals)):
            if i == len(intervals) - 1:
                merges.append(intervals[i])
                break
            else:
                if intervals[i][1] < intervals[i + 1][0]:
                    merges.append(intervals[i])
                elif intervals[i + 1][0] <= intervals[i][1] <= intervals[i + 1][1]:
                    intervals[i + 1] = [intervals[i][0], intervals[i + 1][1]]
                elif intervals[i][1] > intervals[i + 1][1]:
                    intervals[i + 1] = intervals[i]
        return merges


a = Solution()
print(a.merge([[1, 3], [2, 6], [8, 10], [15, 18]]))  # [[1,6],[8,10],[15,18]]
print(a.merge([[1, 4], [4, 5]]))  # [[1,5]
print(a.merge([[1, 3], [4, 6], [5, 10], [15, 18], [25, 28]]))  # [[1, 3], [4,  10], [15, 18], [25, 28]]
print(a.merge([[1, 4], [0, 4]]))  # [[0,4]]
print(a.merge([[1, 4], [2, 3]]))  # [[1, 4]]
